import api from './index'

// 用户列表查询参数
export interface UserPageRequest {
  page: number
  pageSize: number
  sort?: string
  order?: 'asc' | 'desc'
  keyword?: string
}

// 用户信息
export interface UserInfo {
  ID?: number
  id?: number
  CreatedAt: string
  UpdatedAt: string
  DeletedAt: string | null
  username: string
  phone: string
  email: string
  nickname: string
  avatar: string
  role: number
  status: number
  lastLoginAt: string
}

// 创建用户参数
export interface UserCreateDTO {
  username: string
  password: string
  nickname: string
  phone?: string
  email?: string
  avatar?: string
  role: number
  status?: number
}

// API响应结构
export interface ApiResponse<T = any> {
  code: number
  msg: string
  data: T
}

// 分页响应
export interface PageResponse<T> {
  items: T[]
  total: number
  page: number
  pageSize: number
  totalPage: number
}

/**
 * 获取用户列表
 * @param params 分页和搜索参数
 * @returns 用户列表分页数据
 */
export const getUserList = async (params: UserPageRequest) => {
  const response = await api.get<any>('/user/page', { params })
  // 打印API返回的数据结构以便调试
  if (response.data && response.data.items && response.data.items.length > 0) {
    console.log('API返回的用户数据结构:', response.data.items[0])
  }
  return response
}

/**
 * 创建新用户
 * @param data 用户信息
 * @returns 创建结果
 */
export const createUser = (data: UserCreateDTO) => {
  return api.post('/user/add', data)
}

/**
 * 更新用户状态
 * @param userId 用户ID
 * @param status 状态值
 * @returns 更新结果
 */
export const updateUserStatus = (userId: number, status: number) => {
  return api.put(`/user/${userId}/status`, { status })
}

/**
 * 删除用户
 * @param userId 用户ID
 * @returns 删除结果
 */
export const deleteUser = (userId: number) => {
  // 验证userId是有效的数字
  if (!userId || isNaN(Number(userId)) || Number(userId) <= 0) {
    return Promise.reject(new Error('无效的用户ID'));
  }
  
  // 确保userId是数字类型
  const id = Number(userId);
  
  return api.delete(`/user/delete?id=${id}`)
    .catch(error => {
      console.error('删除用户失败:', error);
      throw error;
    });
}

/**
 * 更新用户信息
 * @param userId 用户ID
 * @param data 更新的用户信息
 * @returns 更新结果
 */
export const updateUser = (userId: number, data: Partial<UserCreateDTO>) => {
  return api.put(`/user/update?id=${userId}`, data)
} 